Recently, computer content has increasingly moved towards cloud platforms where dedicated servers render and stream content over a wide area network to client computing devices. In the genre of cloud-based streaming games, such streaming platforms allow service providers to centralize the rendering process for graphical scenes in games at datacenter servers. Server-side rendering offers several advantages. First, client computing devices can utilize the high-end graphics provided by powerful server GPUs, allowing the users to enjoy high-end graphics on less powerful client computing devices. Second, developers can specifically target their software for the datacenter servers, alleviating platform compatibility problems and increasing efficiency in platform performance tuning. Third, centralizing to datacenter servers increases the ease of bug fixing, software updates, hardware updates, and content additions. Lastly, users can select a vast library of content already loaded on the datacenter servers and instantly stream that content to their client computing devices.
One drawback of cloud-based streaming platforms is that wide-area networks can be subject to periods of high latency due to network congestion, packet loss, etc., and/or continually high latency caused by a large distance between the user and the server, which can degrade the user's ability to experience the streaming content in real-time without frequent pauses and delays. Current streaming platforms attempt to solve this problem through the use of content buffers. To implement a content buffer, servers stream content to the client computing device, where the content is placed into a content buffer that stores the content for display to the user. The client computing device waits until sufficient content has been buffered prior to playback to the user. After sufficient content is stored in the buffer, the content is displayed to the user. As the content is displayed, the buffer is refilled with streaming content from the server. Without a buffer, a period of high latency would result in a pause in playback; however, with a buffer, a pause in playback is not needed because a pause merely occurs in downloading the data stream to the buffer. In this manner, streaming content can be played to a user without perceived delays, since delays in downloading due to latency are absorbed by the buffer. However, while buffering can reduce user perceptions of delays in streaming content, buffering is subject to a rather large drawback when applied to applications such as gaming, in which user input at the client computing device is sent to the server and influences the rendered content. In these rendering applications, buffering can actually increase the user's perception of latency, due to the communication time lag between receipt of the content at the computing device and display of the content to the user. A small communication time lag may present an annoyance to the user as a small lag develops between user input and the response of the displayed content. However, a large communication time lag may make real-time game play over such networks frustrating and impractical.